/** DataSonnet version=2.0 output application/json input payload application/json */ /* Product provided Global Template Note: 1. Don't Change the functions 2. For any customization, make proper documentations */ local _DATASOURCE = "OK"; local simpleAttr(sourceattr) = { value: sourceattr }; local lookupAttr(sourceattr, codebase, lookup) = { //value: codebase+"."+lookup+"."+sourceattr value: lookup+"."+codebase+"."+sourceattr }; local complexAttr(sourceattr, codebase, lookup) = { value: codebase+"."+lookup+"."+sourceattr }; local valueCheck(path, objectname, lookupType) = [ if objectname in path then { value: lookupType+"."+objectname } else{ value : null } ]; /*Find the Address Source Ids*/ local reltioHCPCurrentAddressIds = if std.objectHas(payload[0], "object") && std.objectHas(payload[0].object,"attributes") && std.objectHas(payload[0].object.attributes,"Address") && payload[0].crosswalk.sourceTable == "HCP" then ds.jsonpath.select(payload[0].object.attributes, "$.Address[*].value.SourceAddressID[*].value") else ["DUMMY"]; /*Find the Address from Reltio*/ local reltioHCPCurrentAddressDetails = if std.objectHas(payload[0], "object") && std.objectHas(payload[0].object,"attributes") && std.objectHas(payload[0].object.attributes,"Address") && payload[0].crosswalk.sourceTable == "HCP" then ds.jsonpath.select(payload[0].object.attributes, "$.Address[*]") else []; /*Individual Mapping*/ { "individual" : [ if std.objectHas(payload[1], "individual") && payload[1].individual != null then { "attributes" : { "FirstName" : [simpleAttr((payload[1].individual.firstName))], "LastName" : [simpleAttr((payload[1].individual.lastName))], "ValidationStatus":[lookupAttr(payload[1].individual.statusCode, payload[1].codBase, "STA")], "StateCode":[lookupAttr(payload[1].individual.stateCode, payload[1].codBase, "STE")], "SourceName": [simpleAttr(("OK"))], "Title" : [lookupAttr(payload[1].individual.titleCode, payload[1].codBase, "TIT")], "Country" : [simpleAttr((payload[1].country))], "Prefix" : [lookupAttr(payload[1].individual.prefixNameCode, payload[1].codBase, "APP")], "SubTypeCode" : [lookupAttr(payload[1].individual.typeCode, payload[1].codBase, "TYP")], "Specialities": [ { "value" :{ "SpecialtyType" :[simpleAttr(("SPEC"))], "Rank":[simpleAttr("1")], "Specialty": [lookupAttr(specs.code, payload[1].codBase, "SP")], "SortOrder" : [simpleAttr("1." + specs.rank)] } } for specs in ds.valuesOf(payload[1].individual.qualifications) if specs.listCode == "SP" ], "Identifiers" : [ { "value" :{ "ID" : [simpleAttr((idts.value))], "Order":[simpleAttr(idts.number)], "Type": [lookupAttr(idts.typeCode, payload[1].codBase, "REX")] } } for idts in ds.valuesOf(payload[1].individual.externalKeys) ], "Address": [ { "refEntity": { "crosswalks": [ { "type": "configuration/sources/OK", "value": "Surrogate" } ] }, "refRelation": { "crosswalks": [ { "type": "configuration/sources/OK", "value": payload[1].activity.activityEid + "." +payload[1].workplace.workplaceEid+"."+addresses.address.addressEid, "deleteDate": "" } ] }, "value" :{ "PrimaryAffiliation" : if payload[1].activity.isMainActivity && addresses.typeCode == "P" then [simpleAttr("Yes")] else [simpleAttr("No")], "HcoName" : [simpleAttr(payload[1].workplace.usualName)], "AddressRank" : [simpleAttr(addresses.rank)], "AddressLine1" : [simpleAttr(addresses.address.addressLongLabel)], "AddressLine2" : if std.objectHas(addresses.address, "extensionLabel") then [simpleAttr(addresses.address.extensionLabel)] else [{value : null}], "AddressType" : [lookupAttr(addresses.typeCode, payload[1].codBase, "TYS")], "Zip": [ { "value": { "Zip5": [simpleAttr(addresses.address.longPostalCode)] } } ], "City": [simpleAttr(addresses.address.postalTownReference.villageLabel)], "Country":[simpleAttr(addresses.address.postalTownReference.country)], "PostalCity": [simpleAttr(addresses.address.postalTownReference.dispatchLabel )], "SourceAddressInfo": [ { "value": { "SourceLocationId": [simpleAttr(addresses.address.addressEid)], "SourceName": [simpleAttr("OK")] } } ], "SourceAddressID": [simpleAttr(addresses.address.addressEid)], "BuildLabel": [simpleAttr(addresses.buildingLabel)], "StateProvinceCode": [ { "value": "DPT"+"."+payload[1].codBase+"."+subdivisions.externalId } for subdivisions in ds.valuesOf(addresses.address.postalTownReference.subdivisions) if std.objectHas(subdivisions, "subdivisionType") && subdivisions.subdivisionType == "SUB.3" ], "StateProvince": [ simpleAttr(subdivisions.longLocalizedLabel) for subdivisions in ds.valuesOf(addresses.address.postalTownReference.subdivisions) if std.objectHas(subdivisions, "subdivisionType") && subdivisions.subdivisionType == "SUB.3" ], } } for addresses in ds.valuesOf(payload[1].workplace.workplaceAddresses) if std.count(reltioHCPCurrentAddressIds, addresses.address.addressEid ) == 0 ] + reltioHCPCurrentAddressDetails }, "type": "configuration/entityTypes/HCP", "crosswalks": [ { "sourceTable": "HCP", "type": "configuration/sources/OK", "value": payload[1].individual.individualEid, "deleteDate": "" } ] } ] } /*Workplace Mapping*/ { "workplace" : [ if std.objectHas(payload[1], "workplace") && payload[1].workplace != null then { "attributes" : { "Name" : [simpleAttr((payload[1].workplace.usualName))], "UpdateDate" : [simpleAttr(payload[1].workplace.updateDate)], "SourceName" : [simpleAttr(("OK"))], "Country" : [simpleAttr((payload[1].country))], "ValidationStatus":[lookupAttr(payload[1].workplace.statusCode, payload[1].codBase, "STA")], "StateCode":[lookupAttr(payload[1].workplace.stateCode, payload[1].codBase, "STE")], "StateDate" : if std.objectHas(payload[1].workplace, "stateDate") then [simpleAttr(payload[1].workplace.stateDate)] else [], "ActTypeCode" : if std.objectHas(payload[1].workplace, "activityStructureTypeCode") && payload[1].workplace.activityStructureTypeCode != null then [lookupAttr(payload[1].workplace.activityStructureTypeCode, payload[1].codBase, "TAS")] else [], "WebsiteURL": [ { "value" : idts.value } for idts in ds.valuesOf(payload[1].workplace.medias) if idts.typeCode == "W3" ], "Identifiers" : [ { "value" :{ "ID" : [simpleAttr((idts.value))], "Order":[simpleAttr(idts.number)], "Type": [lookupAttr(idts.typeCode, payload[1].codBase, "REX")] } } for idts in ds.valuesOf(payload[1].workplace.externalKeys) ], "ClassofTradeN" :[ { "value":{ "Classification": [lookupAttr(payload[1].workplace.activityLocationCode, payload[1].codBase, "LEX")], "FacilityType" : [lookupAttr(payload[1].workplace.typeCode, payload[1].codBase, "TET")] } } ], "Specialities": [ { "value" :{ "SpecialtyType" :[simpleAttr(("SPEC"))], "Rank":[simpleAttr("1")], "Specialty": [lookupAttr(specs.code, payload[1].codBase, "SP")], "SortOrder" : [simpleAttr("1." + specs.rank)] } } for specs in ds.valuesOf(payload[1].workplace.qualifications) if specs.listCode == "SP" ], "Phone": if std.objectHas(payload[1].workplace, "telephones") then [ { "value": { "Extension": [simpleAttr((phones.officeNumber))], "Number": [simpleAttr((phones.callNumberForDisplay))], "Rank": [simpleAttr(phones.rank)], "TypeIMS": [lookupAttr(phones.typeCode, payload[1].codBase, "TEL")], "CountryCode": [simpleAttr(payload[1].country)] } } for phones in ds.valuesOf(payload[1].workplace.telephones) if phones.typeCode == "1" ], "Address": [ { "refEntity": { "crosswalks": [ { "type": "configuration/sources/OK", "value": "Surrogate" } ] }, "refRelation": { "crosswalks": [ { "type": "configuration/sources/OK", "value": payload[1].workplace.workplaceEid+"."+addresses.address.addressEid, "deleteDate": "" } ] }, "value" :{ "AddressLine1" : [simpleAttr(addresses.address.addressLongLabel)], "AddressLine2" : if std.objectHas(addresses.address, "extensionLabel") then [simpleAttr(addresses.address.extensionLabel)] else [{value : null}], "AddressRank" : [simpleAttr(addresses.rank)], "AddressType" : [lookupAttr(addresses.typeCode, payload[1].codBase, "TYS")], "Zip": [ { "value": { "Zip5": [simpleAttr(addresses.address.longPostalCode)] } } ], "City": [simpleAttr(addresses.address.postalTownReference.villageLabel)], "Country":[simpleAttr(addresses.address.postalTownReference.country)], "PostalCity": [simpleAttr(addresses.address.postalTownReference.dispatchLabel )], "SourceAddressInfo": [ { "value": { "SourceLocationId": [simpleAttr(addresses.address.addressEid)], "SourceName": [simpleAttr("OK")] } } ], "SourceAddressID": [simpleAttr(addresses.address.addressEid)], "BuildLabel": [simpleAttr(addresses.buildingLabel)], "StateProvinceCode": [ { "value": "DPT"+"."+payload[1].codBase+"."+subdivisions.externalId } for subdivisions in ds.valuesOf(addresses.address.postalTownReference.subdivisions) if std.objectHas(subdivisions, "subdivisionType") && subdivisions.subdivisionType == "SUB.3" ], "StateProvince": [ simpleAttr(subdivisions.longLocalizedLabel) for subdivisions in ds.valuesOf(addresses.address.postalTownReference.subdivisions) if std.objectHas(subdivisions, "subdivisionType") && subdivisions.subdivisionType == "SUB.3" ], "Brick": [ { "value": { "Type": [simpleAttr("UG" + segments.type)], "BrickValue": [simpleAttr("UG" + segments.type+"."+payload[1].codBase+"."+ segments.brickEid)], "SortOrder": [simpleAttr(self.Type[0].value+"."+self.BrickValue[0].value)] } } for segments in ds.valuesOf(addresses.address.segmentations) ] } } for addresses in ds.valuesOf(payload[1].workplace.workplaceAddresses) ] }, "type" : "configuration/entityTypes/HCO", "crosswalks" : [ { "sourceTable" : "HCO", "deleteDate" : "", "type" : "configuration/sources/"+_DATASOURCE, "value" : payload[1].workplace.workplaceEid, } ] } ] } /*Activity Mapping*/ { "activity" :[ if std.objectHas(payload[1], "activity") && payload[1].individual != null then { "type": "configuration/relationTypes/Activity", "crosswalks": [ { "value": payload[1].activity.activityEid+"."+payload[1].activity.individualEid+"."+payload[1].activity.workplaceEid, "sourceTable": "Activity", "deleteDate": "", "type": "configuration/sources/OK" } ], "startObject": { "crosswalks": [ { "sourceTable": "HCP", "type": "configuration/sources/OK", "value": payload[1].activity.individualEid } ] }, "endObject": { "crosswalks": [ { "sourceTable": "HCO", "type": "configuration/sources/OK", "value": payload[1].activity.workplaceEid } ] }, "attributes": { "Country": [simpleAttr((payload[1].country))], "ValidationStatus":[lookupAttr(payload[1].activity.statusCode, payload[1].codBase, "STA")], "ActValidationStatus" :[lookupAttr(payload[1].activity.statusCode, payload[1].codBase, "STA")], "RelationshipCreateDate":if std.objectHas(payload[1].activity, "creationDate") then [simpleAttr(payload[1].activity.creationDate)] else [], "RelationshipStartDate":[simpleAttr(payload[1].activity.activityStartDate)], "RelationshipEndDate":[simpleAttr(payload[1].activity.activityEndDate)], "PrimaryAffiliationIndicator": [simpleAttr(payload[1].activity.isMainActivity)], "UpdateDate":[simpleAttr(payload[1].activity.updateDate)], "ActIdentifiers" : [ { "value" :{ "ID" : [simpleAttr((idts.value))], "Order":[simpleAttr(idts.number)], "Type": [lookupAttr(idts.typeCode, payload[1].codBase, "REX")] } } for idts in ds.valuesOf(payload[1].activity.externalKeys) ], } } ] }